package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.SysRole;
import cn.com.dcsgo.dto.PageDTO;
import cn.com.dcsgo.dto.SysRoleAddDTO;
import cn.com.dcsgo.dto.SysRoleQueryDTO;
import cn.com.dcsgo.dto.SysRoleUpdateDTO;
import cn.com.dcsgo.vo.SysRoleVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 针对表【sys_role(角色)】的数据库操作Service
 *
 * @author Dcsgo
 * @since 2025-09-22 15:09:11
 */
public interface SysRoleService extends IService<SysRole> {

    /**
     * 获取当前用户可查看的角色列表
     *
     * @return 当前用户可查看的角色列表
     */
    List<SysRole> getList();

    /**
     * 分页获取角色列表
     *
     * @param pageDTO         分页参数
     * @param sysRoleQueryDTO 查询参数
     * @return 角色列表（按创建时间升序排序）
     */
    Page<SysRole> getPage(PageDTO pageDTO, SysRoleQueryDTO sysRoleQueryDTO);

    /**
     * 添加角色及其关联的权限
     *
     * @param sysRoleAddDTO 角色信息及其关联的权限ID列表
     * @return 受到影响的行数
     */
    int save(SysRoleAddDTO sysRoleAddDTO);

    /**
     * 根据角色ID列表删除角色及其关联的权限
     *
     * @param roleIds 角色ID列表
     * @return 受影响的行数
     */
    int remove(List<Long> roleIds);

    /**
     * 获取角色详情
     *
     * @param roleId 角色ID
     * @return 角色详情，包含其关联的菜单（权限）ID列表
     */
    SysRoleVO getRoleInfo(Long roleId);

    /**
     * 更新角色及其关联的权限
     *
     * @param sysRoleUpdateDTO 更新角色信息及其关联的权限ID列表
     * @return 受影响的行数
     */
    int update(SysRoleUpdateDTO sysRoleUpdateDTO);
}
